import akshare as ak
import pandas as pd
from .base import BaseFundETF


class SinaFundETF(BaseFundETF):
    """
    基于新浪财经的基金ETF数据获取实现
    """
    
    def get_fund_etf_category(self, category: str = "封闭式基金") -> pd.DataFrame:
        """
        获取新浪财经的基金ETF分类数据
        
        Args:
            category: 基金分类，默认为 "封闭式基金"
        
        Returns:
            pd.DataFrame: 基金ETF分类数据
        """
        try:
            # 使用akshare获取基金ETF分类数据
            df = ak.fund_etf_category_sina(symbol=category)
            return df
        except Exception as e:
            raise Exception(f"获取基金ETF分类数据失败: {str(e)}")
    
    def get_fund_etf_daily(self) -> pd.DataFrame:
        """
        获取所有场内交易基金日行情数据
        
        Returns:
            pd.DataFrame: 基金ETF日行情数据
        """
        try:
            # 使用akshare获取所有场内交易基金数据
            df = ak.fund_etf_fund_daily_em()
            return df
        except Exception as e:
            raise Exception(f"获取场内交易基金日行情数据失败: {str(e)}")
    
    def get_fund_overview(self, symbol: str) -> pd.DataFrame:
        """
        获取基金概况数据
        
        Args:
            symbol: 基金代码，例如 "518850"
        
        Returns:
            pd.DataFrame: 基金概况数据
        """
        try:
            # 使用akshare获取基金概况数据
            df = ak.fund_overview_em(symbol=symbol)
            return df
        except Exception as e:
            raise Exception(f"获取基金概况数据失败: {str(e)}")
    
    def get_fund_etf_hist_min(self, symbol: str,start_date: str, 
                             end_date: str, period: str = "1", 
                             adjust: str = "") -> pd.DataFrame:
        """
        获取基金ETF分钟级别数据
        
        Args:
            symbol: 基金代码，例如 "518850"
            start_date: 开始时间，例如 "2025-11-20 09:30:00"
            end_date: 结束时间，例如 "2025-11-20 17:40:00"
            period: 时间周期，默认为 "1" 表示1分钟
            adjust: 复权类型，默认为空
        
        Returns:
            pd.DataFrame: 基金ETF分钟级别数据
        """
        try:
            # 使用akshare获取基金ETF分钟级别数据
            df = ak.fund_etf_hist_min_em(
                symbol=symbol, 
                period=period, 
                adjust=adjust, 
                start_date=start_date, 
                end_date=end_date
            )
            return df
        except Exception as e:
            raise Exception(f"获取基金ETF分钟级别数据失败: {str(e)}")
    
    # def get_fund_etf_hist(self, symbol: str) -> pd.DataFrame:
    #     """
    #     获取新浪财经的基金ETF历史数据
    #     
    #     Args:
    #         symbol: 基金代码，例如 "sh518850"
    #     
    #     Returns:
    #         pd.DataFrame: 基金ETF历史数据
    #     """
    #     try:
    #         # 使用akshare获取基金ETF历史数据
    #         df = ak.fund_etf_hist_sina(symbol=symbol)
    #         return df
    #     except Exception as e:
    #         raise Exception(f"获取基金ETF历史数据失败: {str(e)}")